package demo;

public class VolatileDemo {
    //若线程 A 修改了共享变量 x，但未及时刷新到主内存，线程 B 读取时仍使用自己工作内存中的旧值，导致数据不一致。
    //若 flag 未被 volatile 修饰，checkFlag() 可能因读取旧值而陷入死循环。
    private volatile boolean flag = false;

    public void setFlag() {
        flag = true;  // 写操作立即刷新到主内存
    }

    public void checkFlag() {
        while (!flag) {  // 读操作强制从主内存读取
            // 循环等待
        }
        System.out.println("Flag is now true");
    }
}
